package data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;

import model.Consorcio;
import model.Departamento;
import model.Reclamo;

public class AdmPersistReclamo {
	
	private static AdmPersistReclamo instancia;
	

private AdmPersistReclamo(){
		
}

public static AdmPersistReclamo getInstancia(){
	if(instancia==null)
		instancia=new AdmPersistReclamo();
	return instancia;
}


public void insert(Object o, Consorcio consorcio){
	
	try
	{
		Reclamo r = (Reclamo)o;
		Connection con = PoolConnection.getPoolConnection().getConnection();
		PreparedStatement s = con.prepareStatement("insert into seminario.dbo.Reclamos values (?,?,?,?,?,?)");
		//agregar campos
		s.setInt(1,r.getNro());		
		s.setInt(2,r.getDepartamento().getUnidadFuncional());
		s.setInt(3,consorcio.getNumero());
		s.setString(4,String.valueOf((r.getFecha().get(Calendar.YEAR))+"-"+r.getFecha().get(Calendar.MONTH)+"-"+r.getFecha().get(Calendar.DATE)));
		s.setString(5,r.getDescripcion());
		s.setString(6,r.getUrgencia());
		
		s.execute();
		PoolConnection.getPoolConnection().realeaseConnection(con);
	}
	catch (Exception e)
	{
		System.out.println(e.getMessage());
	}	
	
}

public Reclamo buscarReclamoNro(int nroReclamo){
	try
	{
		Reclamo r = null;
		Connection con = PoolConnection.getPoolConnection().getConnection();
		PreparedStatement s = con.prepareStatement("select r.numero,r.fecha,r.nroConsorcio,r.unidadFuncional,r.descripcion,r.urgencia from seminario.dbo.Reclamos r where numero = ?");
		s.setInt(1, nroReclamo);
		ResultSet result = s.executeQuery();
		while (result.next())
		{
			int numero = result.getInt(1);
			
			Date fecha = result.getDate(2);
			Calendar cal = Calendar.getInstance(); 
			cal.setTime(fecha);
			
			int nroConsorcio = result.getInt(3);
			int unidadFuncional = result.getInt(4);
			String descripcion = result.getString(5);
			String urgencia= result.getString(6);	
			
			Departamento d = AdmPersistDepartamento.getInstancia().buscarDepartamento(unidadFuncional,nroConsorcio);
			
			r = new Reclamo(numero,cal, d, descripcion, urgencia);	    
			
		}
		PoolConnection.getPoolConnection().realeaseConnection(con);
		return r;
		
	}
	catch (Exception e)
	{
		System.out.println();
	}
	return null;
}
public int getMaxNroReclamo(){
	try{
		int numero = 1;
		Connection con = PoolConnection.getPoolConnection().getConnection();
		PreparedStatement s = con.prepareStatement("select max(numero) as numero from seminario.dbo.Reclamos");		
		ResultSet result = s.executeQuery();
		while (result.next()){
			numero = result.getInt(1);
		}
		
		PoolConnection.getPoolConnection().realeaseConnection(con);
		return numero;
	}
	catch (Exception e)
	{
		System.out.println();
	}
	return 0;
}

public Vector<Reclamo> listarReclamos(int nroConsorcio, int unidadFuncional, Calendar desde, Calendar hasta){
	try
	{
		Vector<Reclamo> respuesta = new Vector<Reclamo>();
		Reclamo r = null;
		Connection con = PoolConnection.getPoolConnection().getConnection();
		PreparedStatement s = con.prepareStatement("select r.numero,r.fecha,r.nroConsorcio,r.unidadFuncional,r.descripcion,r.urgencia from seminario.dbo.Reclamos r where nroConsorcio = ? and unidadFuncional = ? and (fecha between ? and ?)");
		s.setInt(1, nroConsorcio);
		s.setInt(2, unidadFuncional);
		s.setString(3,String.valueOf(desde.get(Calendar.YEAR)+"-"+(desde.get(Calendar.MONTH))+"-"+desde.get(Calendar.DATE)));
		s.setString(4,String.valueOf((hasta.get(Calendar.YEAR))+"-"+(hasta.get(Calendar.MONTH))+"-"+hasta.get(Calendar.DATE)));
		ResultSet result = s.executeQuery();
		while (result.next())
		{
			int numero = result.getInt(1);
			Date fecha = result.getDate(2);
			Calendar cal = Calendar.getInstance(); 
			cal.setTime(fecha);			
			int nroCon = result.getInt(3);
			int uf = result.getInt(4);
			String descripcion = result.getString(5);
			String urgencia= result.getString(6);	
			
			Departamento d = AdmPersistDepartamento.getInstancia().buscarDepartamento(uf,nroCon);
			
			r = new Reclamo(numero,cal, d, descripcion, urgencia);
			
			respuesta.add(r);
			
		}
		PoolConnection.getPoolConnection().realeaseConnection(con);
		return respuesta;
		
	}
	catch (Exception e)
	{
		System.out.println();
	}
	return null;
}

	
}
